
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>倒排索引原理 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>倒排索引原理 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是倒排索引？它与传统的正向索引有何根本区别？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">倒排索引是一种高效的索引结构，它根据文档内容创建索引，将文档与包含的词语之间的关系进行逆向存储，从而能够快速查找包含特定关键词的文档。这与根据文档ID查找其内容的传统正向索引（Forward Index）相反。</div>
          </div>
          <div class="card-source">来源: 倒排索引的原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">倒排索引的基本结构由哪两个核心部分组成？它们各自的作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">倒排索引的基本结构由两部分组成：1. 词典（Dictionary）：存储所有在文档中出现过的词汇。2. 倒排表（Posting List）：记录每个词汇所出现的文档ID、在文档中的位置以及词频等信息。</div>
          </div>
          <div class="card-source">来源: 倒排索引的基本结构</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">构建倒排索引的主要步骤有哪些？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">构建倒排索引通常包含四个主要步骤：1. 分词（Tokenization）：将文档内容分割成单词或词组。2. 词汇归一化（Normalization）：去除停用词并进行词干提取或词形还原。3. 建立词典：为每个处理后的词汇分配唯一ID或直接作为词条。4. 生成倒排表：记录每个词汇出现的文档ID及其位置。</div>
          </div>
          <div class="card-source">来源: 倒排索引的构建</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在使用倒排索引进行布尔查询时，AND、OR 和 NOT 操作是如何实现的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">布尔查询通过对关键词对应的倒排表（文档ID集合）进行集合运算来实现：AND查询执行“交集”操作；OR查询执行“并集”操作；NOT查询执行“差集”操作。</div>
          </div>
          <div class="card-source">来源: 倒排索引的查询过程 - 2. 布尔查询</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">为什么实现短语查询需要在倒排表中记录词汇的位置信息？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">因为短语查询要求关键词不仅要出现在同一文档中，还必须按照特定的顺序且相邻出现。因此，倒排表需要记录每个关键词在文档中的具体位置（Position），以便在查询时验证它们的相对位置是否满足短语的要求。</div>
          </div>
          <div class="card-source">来源: 倒排索引的查询过程 - 3. 短语查询</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">为了提高倒排索引的性能和效率，文档中提到了哪些优化方法？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到的优化方法包括：1. 索引压缩：使用压缩技术减少词典和倒排表的存储空间。2. 跳跃表（Skip List）：在倒排表中增加跳跃节点以加速查询定位。3. 分片（Sharding）和分布式索引：将索引分布式存储以提高扩展性。4. 缓存：缓存常用查询结果以减少响应时间。</div>
          </div>
          <div class="card-source">来源: 倒排索引的优化</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
